import axios from "axios";

// 创建 axios 实例
export const http = axios.create({
  baseURL: "http://localhost:8086", // 设置基础请求地址
  timeout: 10000, // 设置请求超时时间
});

// 请求拦截器
http.interceptors.request.use(
  (config) => {
    // 在请求发送之前进行一些处理，比如加入 token、公共参数等
    // 假设你从 React 的 Context 或者 localStorage 中取出 token
    // const token = useContext(YourContext); 或 const token = localStorage.getItem('token');
    const token = localStorage.getItem('token'); // 示例使用 localStorage 存储 token
    if (token) {
      config.headers.Authorization = `Bearer ${token}`; // 为请求添加 Authorization header
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
http.interceptors.response.use(
  (response) => {
    // 统一处理响应数据
    if (response.data.code !== 200) {
      // 这里可以统一处理返回的数据格式，或根据 `code` 判断请求是否成功
      // 使用 React 的方式显示提示，例如使用 react-toastify 或其他提示库
      console.error(response.data.message); // 示例：在控制台打印错误信息
      return Promise.reject(response.data.message);
    }
    return response.data;
  },
  (error) => {
    // 统一处理请求错误，比如网络错误等
    console.error("请求失败，请检查网络", error); // 示例：在控制台打印错误信息
    return Promise.reject(error);
  }
);

// 二次封装的请求方法
const get = (url, params = {}) => {
  return http.get(url, { params });
};

const post = (url, data = {}) => {
  return http.post(url, data);
};

export default {
  get,
  post,
};